package com.sac.common.utils;

import com.sac.approval.domain.ApprovalLineDO;
import com.sac.common.config.Constant;
import com.sac.oa.domain.Response;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.messaging.simp.SimpMessagingTemplate;
import org.springframework.stereotype.Component;

import java.util.List;

@Component
public class WebSocketUtil {

	private static SimpMessagingTemplate messagingTemplate;

	@Autowired
	public void setMessagingTemplate(SimpMessagingTemplate messagingTemplate) {
		WebSocketUtil.messagingTemplate = messagingTemplate;
	}

	public static void pushNotification(List<ApprovalLineDO> users, String message) {
		// 通过convertAndSendToUser 向用户发送信息,
		// 第一个参数是接收消息的用户,第二个参数是浏览器订阅的地址,第三个参数是消息本身
		users.forEach(user -> {
			messagingTemplate.convertAndSendToUser(user.getReceiverEpid(), Constant.POINT2POINT, message);
        });
	}

	public static void pushNotification2All(List<String> users,String message) {
		// 通过convertAndSendToUser 向用户发送信息,
		// 第一个参数是接收消息的用户,第二个参数是浏览器订阅的地址,第三个参数是消息本身
		users.forEach(user -> {
			messagingTemplate.convertAndSendToUser(user, Constant.POINT2POINT, message);
        });
	}

	public static void pushMailSendingFailedNotification(String userId, String message) {
		// 通过convertAndSendToUser 向用户发送信息,
		// 第一个参数是接收消息的用户,第二个参数是浏览器订阅的地址,第三个参数是消息本身
			messagingTemplate.convertAndSendToUser(userId, Constant.POINT2POINT_MailSendingFailed, message);
	}

	
	public static void pushPendingNotification(String user,String message) {
		// 通过convertAndSendToUser 向用户发送信息,
		// 第一个参数是接收消息的用户,第二个参数是浏览器订阅的地址,第三个参数是消息本身
		messagingTemplate.convertAndSendToUser(user, Constant.POINT2POINT, message);
	}

	public static void pushSimpleNotification(String user,String message) {
		// 通过convertAndSendToUser 向用户发送信息,
		// 第一个参数是接收消息的用户,第二个参数是浏览器订阅的地址,第三个参数是消息本身
		messagingTemplate.convertAndSendToUser(user, Constant.POINT2POINT, message);
	}
	
	public static void pushCastNotification(String message) {
		// 通过convertAndSend 向所有订阅用户广播信息,
		// 第一个参数是浏览器订阅的地址,第二个参数是消息本身
		messagingTemplate.convertAndSend(Constant.BROADCAST,new Response(message));
	}
}
